package boot

import (
	"com.cyt.common/constant"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/os/gcfg"
	"github.com/gogf/gf/os/genv"
	"github.com/gogf/gf/os/gfile"
	"github.com/gogf/gf/os/gtime"
	"github.com/gogf/gf/text/gstr"
	"github.com/gogf/gf/util/gconv"
	"github.com/gogf/gf/util/gutil"
	"github.com/gogf/gf/os/gfsnotify"
	"path/filepath"
	"strings"
)

var ConfigPath = "config"

// 用于应用初始化。
func init() {
	// 启动项
	_ = gtime.SetTimeZone("Asia/Shanghai") //设置系统时区
	// 设置配置目录
	ConfigPath = GetMainPath() + string(filepath.Separator) + ConfigPath
	// 监控目录下的配置变化重载配置
	_, _ = gfsnotify.Add(ConfigPath, func(event *gfsnotify.Event) {
		LoadConfig()
	})
	// 加载配置
	LoadConfig()
	// 设置版本
	_ = genv.Set("APP_VERSION", constant.APP_VERSION)
	// 加载Nacos配置
	//LoadCanosConfig()
}

// 加载配置文件
func LoadConfig() {
	config := g.Map{}
	// 加载配置目录文件配置
	_, _ = gfile.ScanDirFunc(ConfigPath, "*.yaml", true, func(path string) string {
		var newConfig *gcfg.Config
		filename := gfile.Basename(path)
		newConfig = gcfg.New(filename)
		_ = newConfig.SetPath(ConfigPath)
		config = gutil.MapMergeCopy(config, newConfig.ToMap())
		return filename
	})
	SetConfig(config)
}

// 设置配置
func SetConfig(value map[string]interface{}) {
	config := g.Map{}
	// 合并原先配置
	gutil.MapMerge(config, gconv.Map(gcfg.GetContent()), value)
	// 加载环境变量
	LoadEnv(config)
	// 设置配置
	gcfg.SetContent(gconv.String(config))
}

// 获取项目路径
func GetMainPath() string {
	return gstr.SubStr(gfile.Pwd(), 0, strings.LastIndex(gfile.Pwd(), constant.APP_PATH))  + constant.APP_PATH
}